const POINT_STYLE = {
  Angle: 0,
  Color: 11,
  Space: 0,
  SymHeight: 12,
  SymID: 31,
  SymWidth: 12
}
class Point {
  /** 
   * @param {array} position [lng,lat]
   * @attr {array}
   * @param {service} {name,layerId}
   * @param {string} docLayer
   */
  static add({
      position,
      attr,
      service,
      docLayer
  }) {
      var gpoint = new Zondy.Object.GPoint(position[0], position[1]);//createPoint();
      //设置当前点要素的几何信息
      var fGeom = new Zondy.Object.FeatureGeometry({ PntGeom: [gpoint] });
      var pointInfo = new Zondy.Object.CPointInfo(POINT_STYLE);
      //设置当前点要素的图形参数信息
      var webGraphicInfo = new Zondy.Object.WebGraphicsInfo({
          InfoType: 1,
          PntInfo: pointInfo
      });
      /* 属性 */
      var attValue = attr;
      /* 1、构建要素 */
      var feature = new Zondy.Object.Feature({
          fGeom: fGeom,
          GraphicInfo: webGraphicInfo,
          AttValue: attValue
      });
      //设置要素为点要素
      feature.setFType(1);
      //2、创建一个要素数据集
      var featureSet = new Zondy.Object.FeatureSet();
      featureSet.clear();
      //设置属性结构
      var cAttStruct = new Zondy.Object.CAttStruct({
          FldName: [],
          FldNumber: attr.length,
          FldType: []
      });
      featureSet.AttStruct = cAttStruct;
      //添加要素到要素数据集
      featureSet.addFeature(feature);
      /* 3、调用服务 */
      //创建一个编辑服务类
      var editService = new Zondy.Service.EditDocFeature(service.name, service.layerId, {
          ip: "localhost",
          port: "6163"    //访问IGServer的端口号，.net版为6163，Java版为8089
      });
      //执行添加点要素功能
      editService.add(featureSet, this.onPntSuccess(docLayer));
  }

  static query({
      position,
      service,
      success
  }) {
      //1、初始化查询结构对象，设置查询结构包含几何信息
      var queryStruct = new Zondy.Service.QueryFeatureStruct();
      //是否包含几何图形信息
      queryStruct.IncludeGeometry = true;
      //是否包含属性信息
      queryStruct.IncludeAttribute = true;
      //是否包含图形显示参数
      queryStruct.IncludeWebGraphic = false;
      //2、指定查询规则
      var rule = new Zondy.Service.QueryFeatureRule({
          //是否将要素的可见性计算在内
          EnableDisplayCondition: false,
          //是否完全包含
          MustInside: false,
          //是否仅比较要素的外包矩形
          CompareRectOnly: false,
          //是否相交
          Intersect: true
      });
      //3、实例化查询参数对象
      //创建一个用于查询的点形状
      var pointObj = new Zondy.Object.Point2D(position[0], position[1]);
      //设置查询点的搜索半径
      pointObj.nearDis = 0.001;
      var queryParam = new Zondy.Service.QueryParameter({
          geometry: pointObj,
          resultFormat: "json",
          struct: queryStruct,
          rule: rule
      });
      //4、实例化地图文档查询服务对象
      var queryService = new Zondy.Service.QueryDocFeature(queryParam, service.name, service.layerId, {
      });
      //执行查询操作，querySuccess为查询回调函数
      queryService.query(success);
  }
  static onPntSuccess(docName) {
      return function (data) {
          if (data.succeed) {
              alert("添加点要素成功！");
              docLayer.refresh();
          } else {
              alert("添加点要素失败！");
          }
      }
  }


}

export {Point}